class Solution {
    public int getMaxLen(int[] nums) {
        // 创建dp表、初始化、填表、返回值
        int n = nums.length;
        int[] f = new int[n];
        int[] g = new int[n];

        f[0] = nums[0] > 0 ? 1 : 0;
        g[0] = nums[0] < 0 ? 1 : 0;

        for (int i = 1; i < n; i++) {
            // 只需判断 > 0 和 < 0 的情况即可
            // = 0 的情况，f[i] = g[i] = 0，默认的满足
            if (nums[i] > 0) {
                f[i] = Math.max(1, f[i-1]+1);
                g[i] = Math.max(0, g[i-1] == 0 ? 0 : g[i-1]+1);
            } else if (nums[i] < 0) {
                f[i] = Math.max(0, g[i-1] == 0 ? 0 : g[i-1]+1);
                g[i] = Math.max(1, f[i-1]+1);
            }
        }

        int ret = 0; // 最小值就是0，因此初始化为0即可
        for (int i = 0; i < n; i++) {
            ret = Math.max(ret, f[i]);
        }

        return ret;
    }
}